package com.hdfs.D;
import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;

/*
 * 创建目录:  hdfs dfs -mkdir /folder1
 * 
 * 通过程序，HDFS的权限的问题
 * 通过4种方式改变权限-----> HDFS的权限检查非常弱
 * 
 * 1、设置一个环境变量: HADOOP_USER_NAME
 * 2、使用Java的-D的参数
 * 3、使用chmod命令，改变/folder2的权限
 * 4、最彻底方式： 配置hadoop的hdfs-site.xml配置： dfs.permissions ----> false
 */
public class TestDemo {

	/**
	 * 设置一个环境变量: HADOOP_USER_NAME
	 * System.setProperty("HADOOP_USER_NAME", "root");
	 */
	@Test
	public void test1() throws Exception{
		// 设置操作用户，不然会没有权限操作
		System.setProperty("HADOOP_USER_NAME", "root");
		
		//配置NameNode 地址信息
		Configuration conf = new Configuration();
		conf.set("fs.defaultFS", "hdfs://192.168.100.201:9000");
		
		//得到HDFS的客户端
		FileSystem fs = FileSystem.get(conf);
		
		//创建一个目录
		fs.mkdirs(new Path("/folder1"));
	}
	
	/**
	 * 2、使用Java的-D的参数
	 * 例如在eclipse 的debug run configurations中的--》arguments--》 VM arguments上设置 -DHADOOP_USER_NAME=root
	 * -ea -DHADOOP_USER_NAME=root
	 * @throws Exception
	 */
	@Test
	public void test2() throws Exception{
		//配置NameNode 地址信息
		Configuration conf = new Configuration();
		conf.set("fs.defaultFS", "hdfs://192.168.100.201:9000");
		
		//得到HDFS的客户端
		FileSystem fs = FileSystem.get(conf);
		
		//创建一个目录
		fs.mkdirs(new Path("/folder2"));
	}
	
	/**
	 * 使用chmod命令，改变/folder2的权限
	 * hdfs dfs -chmod 777 /folder2
	 */
	@Test
	public void test3() throws Exception{
		//配置NameNode 地址信息
		Configuration conf = new Configuration();
		conf.set("fs.defaultFS", "hdfs://192.168.100.201:9000");
		
		//得到HDFS的客户端
		FileSystem fs = FileSystem.get(conf);
		
		//创建一个目录
		fs.mkdirs(new Path("/folder2/folder3"));
	}
	
	/**
	 * 最彻底方式： 配置hadoop的hdfs-site.xml配置： dfs.permissions ----> false
	 */
	@Test
	public void test4() throws Exception{
		//配置NameNode 地址信息
		Configuration conf = new Configuration();
		conf.set("fs.defaultFS", "hdfs://192.168.100.201:9000");
		
		//得到HDFS的客户端
		FileSystem fs = FileSystem.get(conf);
		
		//创建一个目录
		fs.mkdirs(new Path("/folder4"));
	}
	
}

